package com.sky.module.support.log.listener;

import com.sky.module.support.log.event.SysLogEvent;
import com.sky.module.system.OperLog.domain.entity.OperLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;

import java.util.function.Consumer;


 /***
 * @description  异步监听器，相当于观察者
 * @param null
 * @return
 * @date 2023/3/8 1:07
 *
 */
@Slf4j
public class SysLogListener {
    public SysLogListener(Consumer<OperLog> consumer) {
        this.consumer = consumer;
    }

    //private String database;
    private Consumer<OperLog> consumer;



    @Async
    @Order
    @EventListener(SysLogEvent.class)
    public void saveSysLog(SysLogEvent event) {
        //  在这里就监听

        //  到事件对象
        //  至于这个消息是怎么处理，由其它人管理
        OperLog optLog = (OperLog) event.getSource();
        //BaseContextHandler.setDatabase(database);
        // 消费消息调用传进来的代码块，来具体决定是做什么，是将日志信息保存到数据库，还是打印到控制台呢？
        consumer.accept(optLog);
    }
}
